#include <stdio.h>

// //字符串逆序 
// //非递归
// int main()
// {
//     char arr[] = {"abcdef"};
//     int left = 0;
//     int sz = sizeof(arr) / sizeof (arr[0]);
//     int right = sz - 2;//sz包含\0的长度
//     while(left < right)
//     {
//         char temp = arr[left];
//         arr[left] = arr[right];
//         arr[right] = temp;
//         left ++;
//         right --;
//     }
//     printf("%s\n",arr);
//     return 0;
// }

//递归函数写法，要求传递参数只有数组，且不能用string库函数
// int my_strlen(char arr[])
// {
//     int count = 0;
//     while(*arr != '\0')//解引用
//     {
//         count ++;
//         arr ++;
//     }  
//     return count;
// }
// void string_reverse(char* arr)
// {
//     int sz = my_strlen(arr);//求字符串长度
//     char temp = *arr;
//     *arr = *(arr + sz - 1);
//     *(arr + sz - 1) = '\0';//先不替换\0之前的字符，而是将其改为\0，方便下一次调用函数；
//     if(my_strlen(arr + 1) >= 2)
//     {
//         string_reverse(arr + 1);//递归终止条件，剩下的字符串长度小于2时就不用再调用了
//     }
//     *(arr + sz - 1) = temp;//递归调用完成后再替换原来的最后一个字符
// }
// int main()
// {
//     char arr[] = {"abcdefg"};
//     string_reverse(arr);
//     printf("%s\n",arr);
//     return 0;
// }

// //若允许传递更多参数
// int my_strlen(char arr[])
// {
//     int count = 0;
//     while(*arr != '\0')//解引用
//     {
//         count ++;
//         arr ++;
//     }  
//     return count;
// }
// void string_reverse(char* arr,int left,int right)
// {
//         char temp = arr[left];
//         arr[left] = arr[right -1];
//         arr[right - 1] = temp;
//         if(left + 1 < right - 1)
//         {
//             string_reverse(arr,left + 1,right - 1);
//         }
// }
// int main()
// {
//     char arr[] = {"abcdefg"};
//     int left = 0;
//     int right = my_strlen(arr);
//     string_reverse(arr,left,right);
//     printf("%s\n",arr);
//     return 0;
// }




// //写一个函数，将一个整数的各位相加
// int DigitSum(int a)
// {
//     // int sum = 0;
//     // sum = a % 10;
//     // if(a / 10 != 0)
//     // {
//     //     sum = sum + DigitSum(a/10);
//     // }
//     // return sum;
//     //鹏哥写法
//     if(a > 9)
//     {
//         return DigitSum(a / 10)+ a % 10;
//     }
//     else
//     return a;
// }
// int main()
// {
//     unsigned int n = 0;
//     printf("请输入一个整数；>\n");
//     scanf("%u",&n);
//     int Dsum = DigitSum(n);
//     printf("各位之和为%d\n",Dsum);
// }




// //写一个函数，用递归的方式输出n的k次幂
// double Pow(int n,int k)
// {
//     //没考虑k=0和k<0的情况
//     if(k > 0)
//     return n * Pow(n,k - 1);
//     else if(k == 0)
//     return 1;
//     else
//     return 1.0 / Pow(n,-k);
// }
// int main()
// {
//     int n = 0;
//     int k = 0;
//     scanf("%d %d",&n,&k);
//     double ret = Pow(n,k);
//     printf("%lf\n",ret);
// }




// //交换ab两个数组的内容，两个数组长度相同
// int main()
// {
//     int arr1[]={1,3,5,7,9};
//     int arr2[]={2,4,6,8,0};
//     int sz = sizeof(arr1) / sizeof(arr1[0]);
//     int i = 0;
//     for(i = 0;i < sz;i++)
//     {
//         int temp = arr1[i];
//         arr1[i]=arr2[i];
//         arr2[i]=temp;
//     }
//     for(i = 0;i < sz;i++)
//     {
//         printf("%d ",arr1[i]);
//     }
//     printf("\n");
//     for(i = 0;i < sz;i++)
//     {
//         printf("%d ",arr2[i]);
//     }
//     return 0;
// }





//创建一个整形数组，完成对数组的操作
//实现函数init（）初始化数组为0
//实现print（）打印数组的每个元素
//实现reverse(）函数完成数组元素的逆置。
void init(int arr[],int sz)
{
    int i = 0;
    for(i = 0;i < sz;i++)
    {
        arr[i] = 0;
    }
}
void print(int* arr,int sz)
{
    int i = 0;
    for(i = 0;i < sz;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
}
void reverse(int* arr,int left,int right)
{
    int temp = 0;
    temp = arr[left];
    arr[left] = arr[right];
    arr[right] = temp;
    if(left + 1 < right - 1)
    {
        reverse(arr,left + 1,right - 1);
    }
}
int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,0};
    int sz = sizeof(arr) / sizeof(arr[0]);
    print(arr,sz);
    int left = 0;
    int right = sz - 1;
    reverse(arr,left,right);
    print(arr,sz);
    init(arr,sz);
    print(arr,sz);
    return 0;
}